package indi.jp.project.business.yunying.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import indi.jp.project.core.entity.BaseEntity;
import indi.jp.project.core.entity.po.AttachmentPO;
import indi.jp.project.process.entity.FlowTask;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;

public class ProjectFiled extends BaseEntity {
    /**
     * 主键
     */
    private String id;
    /**
     * 项目ID
     */
    @NotBlank(message = "请选择项目")
    private String projectId;
    /**
     * 项目编码
     */
    @NotBlank(message = "项目编号不能为空")
    private String projectCode;
    /**
     * 项目名称
     */
    @NotBlank(message = "项目名称不能为空")
    private String projectName;
    /**
     * 部门ID
     */
    @NotBlank(message = "承担部门不能为空")
    private String departmentId;

    /**
     * 部门编码
     */
    @NotBlank(message = "承担部门不能为空")
    private String departmentCode;

    /**
     * 部门名称
     */
    @NotBlank(message = "承担部门不能为空")
    private String departmentName;
    /**
     * 项目所在地编码
     */
    @NotBlank(message = "项目所在地不能为空")
    private String projectAddrCode;
    /**
     * 项目所在地名称
     */
    @NotBlank(message = "项目所在地不能为空")
    private String projectAddrName;
    /**
     * 项目地址
     */
    private String projectAddrSpec;
    /**
     * 坐标
     */
    private String projectAxis;
    /**
     * 业主单位ID,往来单位表ID
     */
    private String clientCompanyId;
    /**
     * 业主单位名称
     */
    @NotBlank(message = "业务单位不能为空")
    private String clientCompanyName;
    /**
     * 业主单位重要性（0:一般，1:重要）
     */
    @NotNull(message = "请选择业主单位重要性")
    private Integer importanceOfClient;
    /**
     * 取得方式（0:投标，1:委托）
     */
    @NotNull(message = "请选择取得方式")
    private Integer wayOfGet;
    /**
     * 办事处
     */
    @NotBlank(message = "办事处不能为空")
    private String branchOffice;
    /**
     * 项目开始时间
     */
    @NotNull(message = "请选择项目开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date projectBeginDate;
    /**
     * 项目完成时间
     */
    @NotNull(message = "请选择项目结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date projectCompleteDate;
    /**
     * 合同额，单位分
     */
    @NotNull(message = "合同额不能为空")
    private Long amountOfContract;
    /**
     * 经营计提基数
     */
    @NotBlank(message = "经营计提基数不能为空")
    private String accrualRadix;
    /**
     * 经营计提比例
     */
    @NotBlank(message = "经营计提比例不能为空")
    private String accrualRatio;
    /**
     * 经营费，单位分
     */
    @NotNull(message = "经营费不能为空")
    private Long feeOfOperation;
    /**
     * 是否需要合同（0:否，1:是）
     */
    private Integer needContract;
    /**
     * 毛利润，单位分
     */
    private Long grossProfit;
    /**
     * 项目层级（0:所级，1:事业部级）
     */
    @NotNull(message = "请选择项目层级")
    private Integer projectLevel;
    /**
     * 质量目标（0:精品项目、1:优良项目、2:合格项目）
     */
    @NotNull(message = "请选择质量目标")
    private Integer goalOfQuality;
    /**
     * 项目负责人
     */
    @NotBlank(message = "项目负责人不能为空")
    private String projectCharge;
    /**
     * 项目主管
     */
    @NotBlank(message = "项目主管不能为空")
    private String projectSupervisor;
    /**
     * 主办部门
     */
    @NotBlank(message = "主办部门不能为空")
    private String organizeDepartment;
    /**
     * 协办部门
     */
    private String assistedDeptartment;
    /**
     * 协办部门负责人
     */
    private String assistedCharge;
    /**
     * 协办部门负责人手机号
     */
    private String assistedChargePhone;
    /**
     * 经营分包备注
     */
    private String subcontractDescription;
    /**
     * 其他分包（0:直接成本、1:分包合同）
     */
    private Integer subcontractType;
    /**
     * 项目风险
     */
    private String projectRisk;
    /**
     * 项目工作内容相关技术及人员要求
     */
    private String projectDemand;
    /**
     * 流程类型编码
     */
    private String flowTypeCode;

    /**
     * 流程状态，以0为起点
     */
    private Integer state;

    /**
     * 状态名称
     */
    private String stateName;

    /**
     * 处理人
     */
    private String handler;

    /**
     * 处理人名称
     */
    private String handlerName;
    /**
     * 是否允许撤回
     */
    private Integer allowRevoke;
    /**
     * 被驳回时状态
     */
    private Integer rejectedState;
    /**
     * 其他分包 json
     */
    private String subcontractDetail;
    /**
     * 经营性分包金额
     */
    private Long subcontractFee;
    /**
     * 经营性分包占比
     */
    private String subcontractRatio;
    /**
     * 安全负责人编码
     */
    private String safeManCode;
    /**
     * 安全负责人名称
     */
    private String safeManName;
    /**
     * 项目组成员
     */
    private String groupManCode;
    /**
     * 项目组成员名称
     */
    private String groupManName;
    /**
     * 项目组成员职称
     */
    private String groupManTitle;
    /**
     * 项目负责人职称
     */
    private String projectChargeTitle;

    private List<TyunyingSubContract> subContracts;

    private List<AttachmentPO> attachments;

    private List<FlowTask> flowList;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getProjectId() {
        return projectId;
    }

    public void setProjectId(String projectId) {
        this.projectId = projectId;
    }

    public String getProjectCode() {
        return projectCode;
    }

    public void setProjectCode(String projectCode) {
        this.projectCode = projectCode;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public String getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(String departmentId) {
        this.departmentId = departmentId;
    }

    public String getDepartmentCode() {
        return departmentCode;
    }

    public void setDepartmentCode(String departmentCode) {
        this.departmentCode = departmentCode;
    }

    public String getDepartmentName() {
        return departmentName;
    }

    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }

    public String getProjectAxis() {
        return projectAxis;
    }

    public void setProjectAxis(String projectAxis) {
        this.projectAxis = projectAxis;
    }

    public String getClientCompanyId() {
        return clientCompanyId;
    }

    public void setClientCompanyId(String clientCompanyId) {
        this.clientCompanyId = clientCompanyId;
    }

    public String getClientCompanyName() {
        return clientCompanyName;
    }

    public void setClientCompanyName(String clientCompanyName) {
        this.clientCompanyName = clientCompanyName;
    }

    public Integer getImportanceOfClient() {
        return importanceOfClient;
    }

    public void setImportanceOfClient(Integer importanceOfClient) {
        this.importanceOfClient = importanceOfClient;
    }

    public Integer getWayOfGet() {
        return wayOfGet;
    }

    public void setWayOfGet(Integer wayOfGet) {
        this.wayOfGet = wayOfGet;
    }

    public String getBranchOffice() {
        return branchOffice;
    }

    public void setBranchOffice(String branchOffice) {
        this.branchOffice = branchOffice;
    }

    public Date getProjectBeginDate() {
        return projectBeginDate;
    }

    public void setProjectBeginDate(Date projectBeginDate) {
        this.projectBeginDate = projectBeginDate;
    }

    public Date getProjectCompleteDate() {
        return projectCompleteDate;
    }

    public void setProjectCompleteDate(Date projectCompleteDate) {
        this.projectCompleteDate = projectCompleteDate;
    }

    public Long getAmountOfContract() {
        return amountOfContract;
    }

    public void setAmountOfContract(Long amountOfContract) {
        this.amountOfContract = amountOfContract;
    }

    public String getAccrualRadix() {
        return accrualRadix;
    }

    public void setAccrualRadix(String accrualRadix) {
        this.accrualRadix = accrualRadix;
    }

    public String getAccrualRatio() {
        return accrualRatio;
    }

    public void setAccrualRatio(String accrualRatio) {
        this.accrualRatio = accrualRatio;
    }

    public Long getFeeOfOperation() {
        return feeOfOperation;
    }

    public void setFeeOfOperation(Long feeOfOperation) {
        this.feeOfOperation = feeOfOperation;
    }

    public Integer getNeedContract() {
        return needContract;
    }

    public void setNeedContract(Integer needContract) {
        this.needContract = needContract;
    }

    public Long getGrossProfit() {
        return grossProfit;
    }

    public void setGrossProfit(Long grossProfit) {
        this.grossProfit = grossProfit;
    }

    public Integer getProjectLevel() {
        return projectLevel;
    }

    public void setProjectLevel(Integer projectLevel) {
        this.projectLevel = projectLevel;
    }

    public Integer getGoalOfQuality() {
        return goalOfQuality;
    }

    public void setGoalOfQuality(Integer goalOfQuality) {
        this.goalOfQuality = goalOfQuality;
    }

    public String getProjectCharge() {
        return projectCharge;
    }

    public void setProjectCharge(String projectCharge) {
        this.projectCharge = projectCharge;
    }

    public String getProjectSupervisor() {
        return projectSupervisor;
    }

    public void setProjectSupervisor(String projectSupervisor) {
        this.projectSupervisor = projectSupervisor;
    }

    public String getOrganizeDepartment() {
        return organizeDepartment;
    }

    public void setOrganizeDepartment(String organizeDepartment) {
        this.organizeDepartment = organizeDepartment;
    }

    public String getAssistedDeptartment() {
        return assistedDeptartment;
    }

    public void setAssistedDeptartment(String assistedDeptartment) {
        this.assistedDeptartment = assistedDeptartment;
    }

    public String getAssistedCharge() {
        return assistedCharge;
    }

    public void setAssistedCharge(String assistedCharge) {
        this.assistedCharge = assistedCharge;
    }

    public String getAssistedChargePhone() {
        return assistedChargePhone;
    }

    public void setAssistedChargePhone(String assistedChargePhone) {
        this.assistedChargePhone = assistedChargePhone;
    }

    public String getSubcontractDescription() {
        return subcontractDescription;
    }

    public void setSubcontractDescription(String subcontractDescription) {
        this.subcontractDescription = subcontractDescription;
    }

    public Integer getSubcontractType() {
        return subcontractType;
    }

    public void setSubcontractType(Integer subcontractType) {
        this.subcontractType = subcontractType;
    }

    public String getProjectRisk() {
        return projectRisk;
    }

    public void setProjectRisk(String projectRisk) {
        this.projectRisk = projectRisk;
    }

    public String getProjectDemand() {
        return projectDemand;
    }

    public void setProjectDemand(String projectDemand) {
        this.projectDemand = projectDemand;
    }

    public String getFlowTypeCode() {
        return flowTypeCode;
    }

    public void setFlowTypeCode(String flowTypeCode) {
        this.flowTypeCode = flowTypeCode;
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getStateName() {
        return stateName;
    }

    public void setStateName(String stateName) {
        this.stateName = stateName;
    }

    public String getHandler() {
        return handler;
    }

    public void setHandler(String handler) {
        this.handler = handler;
    }

    public String getHandlerName() {
        return handlerName;
    }

    public void setHandlerName(String handlerName) {
        this.handlerName = handlerName;
    }

    public Integer getAllowRevoke() {
        return allowRevoke;
    }

    public void setAllowRevoke(Integer allowRevoke) {
        this.allowRevoke = allowRevoke;
    }

    public Integer getRejectedState() {
        return rejectedState;
    }

    public void setRejectedState(Integer rejectedState) {
        this.rejectedState = rejectedState;
    }

    public String getSubcontractDetail() {
        return subcontractDetail;
    }

    public void setSubcontractDetail(String subcontractDetail) {
        this.subcontractDetail = subcontractDetail;
    }

    public Long getSubcontractFee() {
        return subcontractFee;
    }

    public void setSubcontractFee(Long subcontractFee) {
        this.subcontractFee = subcontractFee;
    }

    public String getSubcontractRatio() {
        return subcontractRatio;
    }

    public void setSubcontractRatio(String subcontractRatio) {
        this.subcontractRatio = subcontractRatio;
    }

    public String getSafeManCode() {
        return safeManCode;
    }

    public void setSafeManCode(String safeManCode) {
        this.safeManCode = safeManCode;
    }

    public String getSafeManName() {
        return safeManName;
    }

    public void setSafeManName(String safeManName) {
        this.safeManName = safeManName;
    }

    public String getGroupManCode() {
        return groupManCode;
    }

    public void setGroupManCode(String groupManCode) {
        this.groupManCode = groupManCode;
    }

    public String getGroupManName() {
        return groupManName;
    }

    public void setGroupManName(String groupManName) {
        this.groupManName = groupManName;
    }

    public String getGroupManTitle() {
        return groupManTitle;
    }

    public void setGroupManTitle(String groupManTitle) {
        this.groupManTitle = groupManTitle;
    }

    public String getProjectChargeTitle() {
        return projectChargeTitle;
    }

    public void setProjectChargeTitle(String projectChargeTitle) {
        this.projectChargeTitle = projectChargeTitle;
    }

    public List<TyunyingSubContract> getSubContracts() {
        return subContracts;
    }

    public void setSubContracts(List<TyunyingSubContract> subContracts) {
        this.subContracts = subContracts;
    }

    public List<AttachmentPO> getAttachments() {
        return attachments;
    }

    public void setAttachments(List<AttachmentPO> attachments) {
        this.attachments = attachments;
    }

    public List<FlowTask> getFlowList() {
        return flowList;
    }

    public void setFlowList(List<FlowTask> flowList) {
        this.flowList = flowList;
    }

    public String getProjectAddrCode() {
        return projectAddrCode;
    }

    public void setProjectAddrCode(String projectAddrCode) {
        this.projectAddrCode = projectAddrCode;
    }

    public String getProjectAddrName() {
        return projectAddrName;
    }

    public void setProjectAddrName(String projectAddrName) {
        this.projectAddrName = projectAddrName;
    }

    public String getProjectAddrSpec() {
        return projectAddrSpec;
    }

    public void setProjectAddrSpec(String projectAddrSpec) {
        this.projectAddrSpec = projectAddrSpec;
    }
}